package factory.config;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class ComputerFactory {

    // 提供创建指定电脑的方法
    public static Computer createComputer(String name){
        return map.get(name);
    }

    // 1、定义容器存储对象
    private static Map<String,Computer> map = new HashMap();

    // 2、向容器中添加数据
    static {
        // 2.1、创建 Properties 对象
        Properties properties = new Properties();
        // 2.2、调用 properties 中的load方法加载指定的文件
        InputStream resourceAsStream = ComputerFactory.class.getClassLoader().getResourceAsStream("factory/config/bean.properties");
        try {
            properties.load(resourceAsStream);
            // 2.3、从 properties 集合中获取全类名并创建对象
            Set<Object> keys = properties.keySet();
            for (Object key : keys) {
                String className = properties.getProperty(String.valueOf(key));
                // 通过反射技术创建对象
                Class<?> aClass = Class.forName(className);
                // 反射实例化(调用无参构造)

                // 如果是其他有参构造方法调用，则需要根据有参构造传递对应的数据值
                // Constructor<?> cons=aClass.getConstructor(.....);
                // Computer instance = (Computer) cons.newInstance(....);

                Computer instance = (Computer) aClass.newInstance();
                // 将对象和名称存储至容器中
                map.put(String.valueOf(key),instance);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
